package 笔试;

import java.util.*;

/**
 * @Date 2024/11/3 19:52
 * @description: 数字广东笔试
 * .
 * @Author LittleNight
 */
public class shuziguangdong {

    // 20%过了
    public int[] findingUsersActiveMinutes (int[][] logs, int k) {
        // write code here
        int n = logs[0].length;
        int[] arr = new int[k];
        Map<Integer, Set<Integer>> hash = new HashMap<>();
        for(int i = 0; i < n; i++) {
            // 下标
            int tmp = logs[i][0];
            // 针对每一个用户, 判断 value.
            // 还需要区分出不同的 key
            if(hash.containsKey(tmp)) {
                // 找到value 并添加
                hash.get(tmp).add(logs[i][1]);
            }else {
                // 没有, 就添加进入
                hash.put(tmp, new HashSet<Integer>());
                hash.get(tmp).add(logs[i][1]);
            }
        }
        // 找到次数
        for (int i = 0; i < n; i++) {
            int tmp = logs[i][0];
            int count = hash.get(tmp).size();
            if(tmp != 0) {
                arr[tmp - 1] = count;
            }
        }
        return arr;
    }

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 给一个长度为 n 的数组，数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字
     * @param array int整型一维数组 保证数组输入非空，且保证有解
     * @return int整型
     */
    public int moreThanHalfNum_Solution (int[] array) {
        // write code here
        // 先排序, 中间元素就是出现的次数超过数组长度的一半的
        Arrays.sort(array);
        return array[array.length / 2];
    }

    // 过了 70%
    public int smallestRepunitDivByK (int k) {
        // write code here
        // 偶数没有答案
        if(k % 2 == 0) {
            return -1;
        }
        // 奇数, 一直开始遍历
        for(long i = 0; i < Long.MAX_VALUE; ) {
            i = i*10 + 1;
            // 返回长度
            if(i % k == 0) {
                long ret = i; int count = 0;
                while(ret != 0) {
                    ret /= 10;
                    count++;
                }
                return count;
            }
        }
        return -1;
    }

}
